package com.ruixi.spring.life;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/*
    后置处理器:在初始化这一步骤的前后加两个步骤
    方法形参
        bean:对象
        beanName:对象名
    返回值
        Object:经过处理之后的新的bean

    加上后置处理器后,Bean的生命周期分为七步
        (1)通过构造器创建bean实例(无参数构造)
        (2)为bean的属性设置值和对其他bean引用(调用set方法)
        (3)把bean的实例传递给bean后置处理器的方法postProcessBeforeInitialization
        (4)调用bean的初始化方法(需要进行配置初始化的方法)
        (5)把bean的实例传递给bean后置后置处理器方法postProcessAfterInitialization
        (6)bean正常使用(对象成功获取)
        (7)当容器关闭的时候,调用bean的销毁方法(需要进行配置销毁的方法)
 */
public class AfterHandler implements BeanPostProcessor {

    //在初始化方法之前执行
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        Person person = (Person)bean;
        if("男".equals(person.getSex())){
            person.setName("张无忌");
        }else {
            person.setName("赵敏");
        }
        //将操作之后的对象进行返回
        return person;
    }

    //在初始化方法之后执行,如果配置了则必须返回对象,如果默认返回null,则该对象就没有了
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

}
